home *** CD-ROM | disk | FTP | other *** search
/ Kompuutteri K-CD 2002 #1 / K-CD_2002-01.iso / Delphi / INSTALL / program files / Borland / Delphi6 / Doc / contnrs.int < prev    next >
Encoding:
Text File  |  2001-05-22  |  5.9 KB  |  201 lines

  1. { *********************************************************************** }
  2. {                                                                         }
  3. { Delphi Runtime Library                                                  }
  4. {                                                                         }
  5. { Copyright (c) 1995-2001 Borland Software Corporation                    }
  6. {                                                                         }
  7. { *********************************************************************** }
  8.  
  9. unit Contnrs;
  10.  
  11. interface
  12.  
  13. uses
  14.   SysUtils, Classes;
  15.  
  16. type
  17.  
  18. { TObjectList class }
  19.  
  20.   TObjectList = class(TList)
  21.   protected
  22.     procedure Notify(Ptr: Pointer; Action: TListNotification); override;
  23.     function GetItem(Index: Integer): TObject;
  24.     procedure SetItem(Index: Integer; AObject: TObject);
  25.   public
  26.     constructor Create; overload;
  27.     constructor Create(AOwnsObjects: Boolean); overload;
  28.  
  29.     function Add(AObject: TObject): Integer;
  30.     function Extract(Item: TObject): TObject;
  31.     function Remove(AObject: TObject): Integer;
  32.     function IndexOf(AObject: TObject): Integer;
  33.     function FindInstanceOf(AClass: TClass; AExact: Boolean = True; AStartAt: Integer = 0): Integer;
  34.     procedure Insert(Index: Integer; AObject: TObject);
  35.     function First: TObject;
  36.     function Last: TObject;
  37.     property OwnsObjects: Boolean;
  38.     property Items[Index: Integer]: TObject; default;
  39.   end;
  40.  
  41. { TComponentList class }
  42.  
  43.   TComponentList = class(TObjectList)
  44.   protected
  45.     procedure Notify(Ptr: Pointer; Action: TListNotification); override;
  46.     function GetItems(Index: Integer): TComponent;
  47.     procedure SetItems(Index: Integer; AComponent: TComponent);
  48.     procedure HandleFreeNotify(Sender: TObject; AComponent: TComponent);
  49.   public
  50.     destructor Destroy; override;
  51.  
  52.     function Add(AComponent: TComponent): Integer;
  53.     function Extract(Item: TComponent): TComponent;
  54.     function Remove(AComponent: TComponent): Integer;
  55.     function IndexOf(AComponent: TComponent): Integer;
  56.     function First: TComponent;
  57.     function Last: TComponent;
  58.     procedure Insert(Index: Integer; AComponent: TComponent);
  59.     property Items[Index: Integer]: TComponent; default;
  60.   end;
  61.  
  62. { TClassList class }
  63.  
  64.   TClassList = class(TList)
  65.   protected
  66.     function GetItems(Index: Integer): TClass;
  67.     procedure SetItems(Index: Integer; AClass: TClass);
  68.   public
  69.     function Add(AClass: TClass): Integer;
  70.     function Extract(Item: TClass): TClass;
  71.     function Remove(AClass: TClass): Integer;
  72.     function IndexOf(AClass: TClass): Integer;
  73.     function First: TClass;
  74.     function Last: TClass;
  75.     procedure Insert(Index: Integer; AClass: TClass);
  76.     property Items[Index: Integer]: TClass; default;
  77.   end;
  78.  
  79. { TOrdered class }
  80.  
  81.   TOrderedList = class(TObject)
  82.   protected
  83.     procedure PushItem(AItem: Pointer); virtual; abstract;
  84.     function PopItem: Pointer; virtual;
  85.     function PeekItem: Pointer; virtual;
  86.     property List: TList;
  87.   public
  88.     constructor Create;
  89.     destructor Destroy; override;
  90.  
  91.     function Count: Integer;
  92.     function AtLeast(ACount: Integer): Boolean;
  93.     function Push(AItem: Pointer): Pointer;
  94.     function Pop: Pointer;
  95.     function Peek: Pointer;
  96.   end;
  97.  
  98. { TStack class }
  99.  
  100.   TStack = class(TOrderedList)
  101.   protected
  102.     procedure PushItem(AItem: Pointer); override;
  103.   end;
  104.  
  105. { TObjectStack class }
  106.  
  107.   TObjectStack = class(TStack)
  108.   public
  109.     function Push(AObject: TObject): TObject;
  110.     function Pop: TObject;
  111.     function Peek: TObject;
  112.   end;
  113.  
  114. { TQueue class }
  115.  
  116.   TQueue = class(TOrderedList)
  117.   protected
  118.     procedure PushItem(AItem: Pointer); override;
  119.   end;
  120.  
  121. { TObjectQueue class }
  122.  
  123.   TObjectQueue = class(TQueue)
  124.   public
  125.     function Push(AObject: TObject): TObject;
  126.     function Pop: TObject;
  127.     function Peek: TObject;
  128.   end;
  129.  
  130. { TBucketList, Hashed associative list }
  131.  
  132.   TCustomBucketList = class;
  133.  
  134.   TBucketItem = record
  135.     Item, Data: Pointer;
  136.   end;
  137.   TBucketItemArray = array of TBucketItem;
  138.  
  139.   TBucket = record
  140.     Count: Integer;
  141.     Items: TBucketItemArray;
  142.   end;
  143.   TBucketArray = array of TBucket;
  144.  
  145.   TBucketProc = procedure(AInfo, AItem, AData: Pointer; out AContinue: Boolean);
  146.  
  147.   TCustomBucketList = class(TObject)
  148.   protected
  149.     property Buckets: TBucketArray;
  150.     property BucketCount: Integer;
  151.  
  152.     function BucketFor(AItem: Pointer): Integer; virtual; abstract;
  153.  
  154.     function FindItem(AItem: Pointer; out ABucket, AIndex: Integer): Boolean; virtual;
  155.     function AddItem(ABucket: Integer; AItem, AData: Pointer): Pointer; virtual;
  156.     function DeleteItem(ABucket: Integer; AIndex: Integer): Pointer; virtual;
  157.   public
  158.     destructor Destroy; override;
  159.     procedure Clear;
  160.  
  161.     function Add(AItem, AData: Pointer): Pointer;
  162.     function Remove(AItem: Pointer): Pointer;
  163.  
  164.     function ForEach(AProc: TBucketProc; AInfo: Pointer = nil): Boolean;
  165.     procedure Assign(AList: TCustomBucketList);
  166.  
  167.     function Exists(AItem: Pointer): Boolean;
  168.     function Find(AItem: Pointer; out AData: Pointer): Boolean;
  169.     property Data[AItem: Pointer]: Pointer; default;
  170.   end;
  171.  
  172. { TBucketList }
  173.  
  174.   TBucketListSizes = (bl2, bl4, bl8, bl16, bl32, bl64, bl128, bl256);
  175.  
  176.   TBucketList = class(TCustomBucketList)
  177.   protected
  178.     function BucketFor(AItem: Pointer): Integer; override;
  179.   public
  180.     constructor Create(ABuckets: TBucketListSizes = bl16);
  181.   end;
  182.  
  183. { TObjectBucketList }
  184.  
  185.   TObjectBucketList = class(TBucketList)
  186.   protected
  187.     function GetData(AItem: TObject): TObject;
  188.     procedure SetData(AItem: TObject; const AData: TObject);
  189.   public
  190.     function Add(AItem, AData: TObject): TObject;
  191.     function Remove(AItem: TObject): TObject;
  192.  
  193.     property Data[AItem: TObject]: TObject; default;
  194.   end;
  195.  
  196. { Easy access error message }
  197.  
  198. procedure RaiseListError(const ATemplate: string; const AData: array of const);
  199.  
  200. implementation
  201.